#include <stdio.h>

int main(){
    int var = 10;
    // 定义指针变量 &取地址符 *取值符
    int *ptr = &var;

    printf("var = %d\n", var);
    printf("ptr = %p\n", ptr);
    printf("*ptr = %d\n", *ptr);
    printf("=========\n");
    // 数组就是指针 arr_ptr指向第一个元素，后面只需要一个一个加1
    int arr[3] = {1, 2, 3};
    int *arr_ptr = arr;
    printf("arr = %p\n", arr);
    printf("arr = %p\n", arr_ptr);
    printf("*ptr = %d\n", *arr_ptr);
    printf("arr[0] = %d\n", arr_ptr[0]);
    // arr_ptr + 1指向下一个元素地址, * 去解析地址中的值
    for(int i = 0; i < 3; i++){
        printf("arr[%d] = %d\n", i, *(arr_ptr + i));
    }


    void swap1(int *a,int *b){
        int temp = *a;
        *a = *b;
        *b = temp;
    }

    int x = 5,
    y = 10;
    swap1(&x, &y);
    printf("x = %d, y = %d\n", x, y);

    // 多级指针
    int a = 10;
    int *p = &a;
    int **q = &p;
    printf("a = %d\n", a);
    printf("*p = %p\n", *p);
    printf("**q = %d\n", **q);


}